package com.one.blocks.mvc.manager;

import java.util.List;

/**
 * oracle与mysql驱动不同，操作成功返回影响行数为负数，所以根据返回值判断操作是否成功较麻烦，只要操作没抛异常统一认为操作成功
 *
 * @author linfuxin Created on 2022-02-14 11:31:43
 */
public interface BatchManager<T> {

    /**
     * 批量插入记录
     *
     * @param list 实体对象
     */
    void insertBatch(List<T> list);

    /**
     * 批量插入记录, 有异常数据则终止不回滚
     *
     * @param list 实体对象
     * @return 发生异常数据的下标
     */
    Integer insertBatchOfBreakIfException(List<T> list);

    /**
     * 批量插入记录, 有异常数据忽略跳过继续执行
     *
     * @param list 实体对象
     * @return 发生异常的数据集合
     */
    List<T> insertBatchOfIgnoreIfException(List<T> list);

    /**
     * 更新单条记录
     *
     * @param list 实体对象
     */
    void updateBatchById(List<T> list);

    /**
     * 批量插入记录, 有异常数据则终止并返回该异常数据
     *
     * @param list 实体对象
     * @return 发生异常的数据
     */
    Integer updateBatchByIdOfBreakIfException(List<T> list);

    /**
     * 批量插入记录, 有异常数据忽略跳过继续执行
     *
     * @param list 实体对象
     * @return 发生异常的数据
     */
    List<T> updateBatchByIdOfIgnoreIfException(List<T> list);

    /**
     * 批量保存或更新
     *
     * @param list 实体对象
     * @return 保存数据条数
     */
    void saveBatch(List<T> list);
}
